class Solution {
public:
    string largestNumber(vector<int>& nums) {
        // 优化，先把所有数提前转成字符串
        vector<string> strs;
        for(int &x : nums)
            strs.push_back(to_string(x));

        // 排序
        // [10, 2]
        // a = 10, b = 2;
        // ab => 102, ba => 210
        // ba的组合才是我们要的
        sort(strs.begin(), strs.end(), [](const string& a, const string& b){
            return a + b > b + a;
        });

        string ret;
        for(string &x : strs)
            ret += x;
        if(ret[0] == '0')
            return "0";


        // 下面的写法是自己写的
        // 重新制定排序规则，也就是更改库函数第三个参数
        // struct my
        // {
        //     bool operator()(int x, int y)
        //     {
        //         string a = to_string(x);
        //         string b = to_string(y);
        //         if(a + b > b + a)
        //             return true;
        //         else
        //             return false;
        //     }
        // };

        // sort(nums.begin(), nums.end(), my());
        // string ret;
        // for(int x : nums)
        //     ret += to_string(x);
        // if(ret[0] == '0')
        //     return "0";

        return ret;
    }
};